# 如果子类重写父类的属性和方法, 则优先使用子类的属性和方法 [mro资源优先顺序确定]

# 1 定义师父类
class Master(object):
    # 1.1 init
    def __init__(self):
        self.kongfu = '[传统方法]'

    # 1.2 摊煎饼方法 make_cake
    def make_cake(self):
        print(f'使用{self.kongfu}摊煎饼')


# 2 定义黑马学校类
class HeimaSchool(object):
    def __init__(self):
        self.kongfu = '[AI方法]'

    def make_cake(self):
        print(f'使用{self.kongfu}摊煎饼')

# 如果子类重写父类的属性和方法, 则优先使用子类的属性和方法 [mro资源优先顺序确定]

# 2 定义徒弟类 Prentice
# class Prentice(Master, HeimaSchool):
class Prentice(HeimaSchool, Master):
    def __init__(self):
        self.kongfu = '[独创方法]'

    def make_cake(self):
        print(f'使用{self.kongfu}摊煎饼')

    # 增加2个函数 分别显示的调用父类的方法
    def make_cake_master(self):
        Master.__init__(self)
        Master.make_cake(self)  #

    def make_cake_Heimaschool(self):
        HeimaSchool.__init__(self)
        HeimaSchool.make_cake(self)


# 3 测试继承
xiaoming = Prentice()
xiaoming.make_cake()
print(xiaoming.kongfu)

xiaoming.make_cake_master()
xiaoming.make_cake_Heimaschool()


# 重写: 父类里面有,孩子又写了一遍 重写

# 问题1: 为什么要35行要显式调用了一下 Master.__init__(self)

